package com.biz.primus.ms.sms.service.model;

import com.biz.primus.model.misc.exception.ProviderNotAvailableException;
import com.biz.primus.model.misc.vo.MultiReceiverShortMessageVo;
import com.biz.primus.model.misc.vo.ProviderResponse;
import com.biz.primus.model.misc.vo.ShortMessageVo;

/**
 *
 * 抽象出的供应商短信api
 *
 * @author yanweijin
 * @date 2017/5/30
 */
interface ProviderMessageApi {

	/**
	 * 短信单发
	 * @param sm
	 * @return
	 * @throws ProviderNotAvailableException 当供应商因为各种各样的问题无法使用时
	 */
	ProviderResponse send(ShortMessageVo sm) throws ProviderNotAvailableException;

	/**
	/**
	 * 不同内容短信群发
	 * @param sm 要发送的短信
	 * @return
	 * @throws UnsupportedOperationException 当provider不提供此功能时
	 * @throws ProviderNotAvailableException 当供应商因为各种各样的问题无法使用时
	 */
	ProviderResponse massSend(ShortMessageVo... sm) throws UnsupportedOperationException,ProviderNotAvailableException;

	/**
	 * 相同内容短信群发
	 * @param multiReciverShortMessage
	 * @throws UnsupportedOperationException 当provider不提供此功能时
	 * @throws ProviderNotAvailableException 当供应商因为各种各样的问题无法使用时
	 * @return
	 */
	ProviderResponse massSend(MultiReceiverShortMessageVo multiReciverShortMessage) throws UnsupportedOperationException,ProviderNotAvailableException;

	/**
	 * 获取当前余额,单位为分
	 * @return
	 * @throws UnsupportedOperationException 当provider不提供此功能时
	 * @throws ProviderNotAvailableException 当供应商因为各种各样的问题无法使用时
	 */
	long getBalance() throws UnsupportedOperationException,ProviderNotAvailableException;

	/**
	 * 从供应商处拉取短信接收状态,并持久化
	 * @throws UnsupportedOperationException 当provider不提供此功能时
	 * @throws ProviderNotAvailableException 当供应商因为各种各样的问题无法使用时
	 */
	void pullDeliveryStateAndPersist() throws UnsupportedOperationException,ProviderNotAvailableException;

}
